package 二叉树;

/**
 * 给定一个二叉树，判断其是否是一个有效的二叉搜索树。
 * =
 * 假设一个二叉搜索树具有如下特征：
 * 1.节点的左子树只包含小于当前节点的数。
 * 2.节点的右子树只包含大于当前节点的数。
 * 3.所有左子树和右子树自身必须也是二叉搜索树。
 * <p>
 * 思路:
 * 从根节点开始遍历，判断左子树小于根节点，右子树大于根节点，递归知道子树为空
 * <p>
 * https://leetcode-cn.com/problems/validate-binary-search-tree/
 */
public class _98_验证二叉搜索树 {

    public boolean isValidBST(TreeNode root) {
        return validate(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean validate(TreeNode node, long min, long max) {
        if (node == null) return true;
        if (node.val <= min || node.val >= max) {
            return false;
        }
        return validate(node.left, min, node.val) && validate(node.right, node.val, max);
    }
}



